/**
  ******************************************************************************
  * @file    main.c
  * @author  ashuai0110
  * @version V1.0
  * @date    2024-01-28
  * @brief   使用举例-命令行交互
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module
  *
  ******************************************************************************
  */

/* 包含头文件-----------------------------------------------------------------*/
#include "stm32f10x.h"

#include "command_line.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有类型定义---------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/
static cmd_line_t rttCmdLine; /* segger rtt的命令行实例 */

/* 全局变量-------------------------------------------------------------------*/

/* 私有函数原型---------------------------------------------------------------*/


/**
  * @brief  segger rtt 写函数
  *
  * @param  pBuf : 数据缓存区
  *
  * @param  len  : 写入数量
  *
  * @retval 实际写入数量
  */
uint32_t segger_rtt_write(void *pBuf, uint32_t len) 
{
    return SEGGER_RTT_Write(0, pBuf, len);
}

/**
  * @brief  segger rtt 读函数
  *
  * @param  pBuf : 数据存储区
  *
  * @param  len  : 读出数量
  *
  * @retval 实际读出数量
  */
uint32_t segger_rtt_read(void *pBuf, uint32_t len) 
{
    return SEGGER_RTT_Read(0, pBuf, len);
}

/**
  * @brief  test 命令回调函数
  *
  * @param  _cmd : 命令行实例
  *
  * @param  argc : 参数数量
  *
  * @param  argv : 参数数组
  *
  * @retval None
  */
void test_cmd_callback(cmd_line_t *_cmd, int argc, char *argv[])
{
    for(uint8_t cnt = 0; cnt < argc; cnt++)
    {
        cmd_line_printf(_cmd, "param%d:%s\r\n", cnt + 1, argv[cnt]);
    }
}

/**
  * @brief  main
  */
int main(int argc, char *argv[])
{
    VERSION_LOG("example-command_line", 1, 0, 0);

    uint8_t ret = 0;
    /* 命令行初始化 命令行对接数据读写函数需用户自行编写,函数格式参考定义 */
    ret = cmd_line_init(&rttCmdLine, segger_rtt_write, segger_rtt_read, CMD_LINE_ECHO_ON, CMD_LINE_RUN_START);
    if(RET_OK != ret) { ERROR_LOG("cmd_line_init failure"); }
    /* 命令注册 命令回调函数需用户自行编写,函数格式参考定义 */
    ret = cmd_line_register("test", test_cmd_callback);
    if(RET_OK != ret) { ERROR_LOG("cmd_line_register failure"); }
    
    while(1)
    {
        /* 命令行轮询处理 */
        cmd_line_poll();
    }
}

